/**************************************************************************************************
**                                                                                               **
**  文件名称:  app_task_test.c                                                                  **
**  版权所有:  CopyRight @ Xiamen Yaxon NetWork CO.LTD. 2017                                     **
**  文件描述:  用户任务测试模块                                                                  **
**  ===========================================================================================  **
**  创建信息:  | 2018-7-13 | LEON | 创建本模块                                                   **
**  ===========================================================================================  **
**  修改信息:  单击此处添加....                                                                  **
**************************************************************************************************/
#include "app_include.h"
#include "app_task_test.h"

/*************************************************************************************************/
//                           模块宏定义
/*************************************************************************************************/
#define TEST_TASK_PRIO       6                                                 /* 任务优先级 */
#define TEST_STK_SIZE        128                                               /* 任务堆栈大小 */

/*************************************************************************************************/
//                           静态变量定义
/*************************************************************************************************/
static OS_TCB  TestTaskTCB;                                                    /* 任务控制块 */
static CPU_STK TEST_TASK_STK[TEST_STK_SIZE];                                   /* 任务堆栈 */
static OS_TMR  TestTimer;

/**************************************************************************************************
**  函数名称:  UpdateHeadStr
**  功能描述:  更新标题栏处的显示内容
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
static void UpdateHeadStr(void)
{
    INT8U buff[16];
    
    sprintf((char *)&buff[0], "CPU Usage: %.2d.%.2d%%", (OSStatTaskCPUUsage / 100), (OSStatTaskCPUUsage % 100));
    
    DAL_LCD_DisplayStringLine(LCD_LINE_0, buff);
}

/**************************************************************************************************
**  函数名称:  TestTimerHdl
**  功能描述:  定时器处理函数
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
static void TestTimerHdl(OS_TMR *p_tmr, void *p_arg)
{
    UpdateHeadStr();
}

/**************************************************************************************************
**  函数名称:  TestTask
**  功能描述:  测试任务的实际执行函数
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
static void TestTask(void *p_arg)
{
    OS_ERR err;
    
    p_arg = p_arg;
    
    OSTmrCreate(&TestTimer, "TestTimer", 0, 10, OS_OPT_TMR_PERIODIC, (OS_TMR_CALLBACK_PTR)TestTimerHdl, NULL, &err);
    OSTmrStart(&TestTimer, &err);
    
    while (1) {
        OSTimeDlyHMSM(0, 0, 1, 0, OS_OPT_TIME_HMSM_STRICT, &err);
    }
}

/**************************************************************************************************
**  函数名称:  CreateTestTask
**  功能描述:  创建用户测试任务
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
void CreateTestTask(void)
{
    OS_ERR err;

    OSTaskCreate((OS_TCB    * )&TestTaskTCB,
                 (CPU_CHAR  * )"TestTask",
                 (OS_TASK_PTR )TestTask,
                 (void      * )0,
                 (OS_PRIO     )TEST_TASK_PRIO,
                 (CPU_STK   * )&TEST_TASK_STK[0],
                 (CPU_STK_SIZE)TEST_STK_SIZE / 10,
                 (CPU_STK_SIZE)TEST_STK_SIZE,
                 (OS_MSG_QTY  )0,
                 (OS_TICK     )0,
                 (void      * )0,
                 (OS_OPT      )OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR | OS_OPT_TASK_SAVE_FP,
                 (OS_ERR    * )&err);
}


